草庐IT

Java HotSpot 枚举开销

全部标签

c++ - c/c++中指针的内存开销

我在64位平台上,所以所有内存地址都是8个字节。因此,为了估计一个数组的内存使用情况,我应该为数组中的每个条目向sizeof(DATATYPE)添加8个字节。例子:shortunsignedint*ary=newshortunsignedint[1000000];//length1mio//sizeof(shortunsingedint)=2bytes//sizeof(shortunsingedint*)=8bytes那么每个条目占用10bytes吗?因此,我的1mio长度数组会使用至少10兆字节吗?谢谢 最佳答案 不,您不会获得每

C++ 逐步枚举

我正在尝试用C++编写一个枚举的等价物,步长为八步而不是一步,例如enum{foo,bar=8,baz=16,};会有很多条目,每隔一段时间就会添加新条目,为了清楚起见,它们真的希望按照条目顺序以外的顺序编写,所以最好不要一直更新所有手写数字。我试过使用宏预处理器技巧,但到目前为止还没有成功。有没有办法做到这一点我忽略了? 最佳答案 #defineNEXT_ENUM_MEMBER(NAME)\NAME##_dummy,\NAME=NAME##_dummy-1+8enumMyEnum{Foo,NEXT_ENUM_MEMBER(Bar)

c++ - typedef 和枚举或枚举类

我有一个这样的枚举:(实际上,它是一个枚举类)enumclasstruth_enum{my_true=1,my_false=0};我希望能够将my_true暴露给全局命名空间,这样我就可以这样做:chara_flag=my_true;或者至少:chara_flag=(char)my_true;取而代之的是:chara_flag=truth_enum::my_true;这可能吗?我试过这样的:typedeftruth_enum::my_true_true_;我收到错误:枚举类truth_enum中的my_true没有命名类型我的猜测是my_true是一个值而不是类型。有没有其他方法可以让

c++ - 为什么 "dynamic exception"保证会导致开销?

在C++11中,这已被弃用:voidfoo()throw();并替换为voidfoo()noexcept;在thisarticle据解释,这样做的原因(除其他外,归结为同一件事)是C++exceptionspecificationsarecheckedatruntimeratherthanatcompiletime,sotheyoffernoprogrammerguaranteesthatallexceptionshavebeenhandled.虽然这对我来说确实有意义,但我不明白为什么首先要动态检查throw(),或者为什么noexcept不提供异常保证除了调用std::termin

c++ - parallel_for (Inter TBB) 是否存在类似于我们在 std::function 上看到的开销?

在此链接中std::functionvstemplate关于std::function的开销有一个很好的讨论。基本上,要避免传递给std::function构造函数的仿函数的堆分配造成10倍的开销,您必须使用std::ref或std::cref。取自@CassioNeri答案的示例显示了如何通过引用将lambda传递给std::function。floatfoo(std::functionf){return-1.0f*f(3.3f)+666.0f;}foo(std::cref([a,b,c](floatarg){returnarg*0.5f;}));现在,IntelThreadBuil

c++ - 写static const uint变量和匿名枚举变量有什么区别?

正在查看boostasiossl_client.cppexample并在顶部找到了这个:enum{max_length=1024};想知道,这个和有什么区别吗namespace{constintmax_length=1024;}或staticconstintmax_length=1024;或者也许它们是绝对相等的,但这只是更短? 最佳答案 如果您将它用作值而不是引用,它们是等价的。enum{constantname=initializer};习语曾经在头文件中非常流行,因此您可以在类声明中毫无问题地使用它:structX{enum{

c++ - 在 QML 中使用 C++ 枚举作为字符串

我想做的是在C++中使用以下枚举:classMyClass:publicQQuickItem{Q_OBJECTQ_PROPERTY(MyEnumenumValueREADgetEnumValue)public:enumMyEnum{MyEnumElement=0};Q_ENUM(MyEnum)slots:MyEnumgetEnumValue(){returnenumValue;}private:MyEnumenumValue=MyEnumElement;};在QML中是这样的:MyClass{id:myClass}Text{text:"enumValueis:"+myClass.enu

c++ - 与枚举的隐式转换

这是一个基本问题,我希望轻松地谷歌一下,但没有找到答案。假设我有一个枚举:enumabc{a,b,c};支持哪些隐式转换?编译器之间是否有任何编译器扩展或不同行为?我问的是关于到枚举的隐式转换:enumabctest=(**whichtypecanappearhere?**);以及从枚举的隐式转换:(**whichtypecanappearhere?**)test2=test;我想知道C和C++的答案。 最佳答案 正如引用所说:Valuesofunscopedenumerationtypeareimplicitly-converti

c++ - 在不膨胀命名空间的情况下在 C++ 中声明枚举的好方法

我注意到如果我使用MicrosoftVisualStudioExpress2013在C++中执行类似的操作:namespaceLogLevelEnum{enumType{ALL,FINEST,FINE,INFO,WARNING,SEVERE,OFF};}typedefLogLevelEnum::TypeLogLevel;我可以使用诸如LogLevel::INFO和LogLevel::WARNING之类的东西来访问enum项,但不是简单地执行信息或警告。我喜欢这种方式,因为它不会将尽可能多的符号放入包含的命名空间中。但是,我想知道这是否是标准行为。我知道可以使用::运算符对类和命名空间进

c++ - 如何将枚举类传递给 QML?

我正在学习使用Qt来学习QML,但在将enumclass传递给qml时遇到了一些麻烦。当我将信号与int参数一起使用时-一切正常,代码运行完美。但是,问题来了,如果我将信号与一些enumclass参数一起使用,我在qml信号处理程序中有未定义值。我尝试通过qmlRegisterType注册enumclass但它不起作用。我将不胜感激。这里是代码:一些HelperclassclassHelper:publicQObject{Q_OBJECTQ_ENUMS(Requester)Q_ENUMS(JANSWER)public:enumclassRequester{ReqLogin,ReqNul